<?php
require_once dirname(__FILE__) . '/UsersModel.php';
require_once dirname(__FILE__) . '/../common/Validate.php';


/**
 * Vy för inloggningsfunktionalitet
 */
class UsersView {
	private static $k_username = 'users_username';
	private static $k_fullName = 'fullName';
	private static $k_password = 'users_password';
	private static $k_confirmPassword = 'confirmpass';
	private static $k_email = 'email';
	private static $k_register = 'register';
	private $validationErrors = array();
	private $sucessMessages = array();

	// Returnerar HTML f�r anvandarregistrering
	public function DoRegBox($failedLoginMessage = false) {
		
		return '<div id="register">
					<fieldset>
					<form method="post">
						<h2>Registrera användare</h2>
						' . $this->GetValidationErrors() . 
						    $this->GetSucessMsgs() . '
						<div class="input">
							<label for="' . self::$k_username . '">Användarnamn: </label>
							<input name="' . self::$k_username . '" id="' . self::$k_username . '" />
						</div>
						<div class="input">
							<label for="' . self::$k_fullName . '">Namn: </label>
							<input name="' . self::$k_fullName . '" id="' . self::$k_fullName . '" />
						</div>
						<div class="input">
							<label for="' . self::$k_password . '">Lösenord: </label>
							<input type="password" name="' . self::$k_password . '" id="' . self::$k_password . '" />
						</div>
						<div class="input">
							<label for="' . self::$k_confirmPassword . '">Repetera lösenord: </label>
							<input type="password" name="' . self::$k_confirmPassword . '" id="' . self::$k_confirmPassword . '" />
						</div>
						<div class="input">
							<label for="' . self::$k_email . '">Epost: </label>
							<input name="' . self::$k_email . '" id="' . self::$k_email . '" />
						</div>
						
						<input type="submit" name="' . self::$k_register . '" value="Registrera!" />
					</form>
					</fieldset>
				</div>';
	}

	public function OutputUsers($users) {
		
		$length = count($users);
		
		$usersTable = '
			<div id="members">
			<table>
				<thead>
					<td>Användarnamn: </td>
					<td>Namn: </td>
					<td>Epost: </td>
				</thead>';
		
		for ($i = 0; $i < $length; ++$i) {
			$user = $users[$i];
			
			$usersTable .= ($i % 2 === 0) ? '<tr class="odd"><td>' : '<tr class="even"><td class="username">';
			$usersTable .= $user->username;
			$usersTable .= '</td><td class="fullname">';
			$usersTable .= $user->fullname;
			$usersTable .= '</td><td class="email">';
			$usersTable .= $user->email;
			$usersTable .= '</td></tr>';
		}
		$usersTable .= '</table></div>';
		
		return $usersTable;
	}
	
	// Returnerar användarnamnet från $_POST
	public function GetUserName() {
		if (isset($_POST[self::$k_username])) {
			$valRes = Validate::username($_POST[self::$k_username]);
			
			if ($valRes->isValid()) {
				return $valRes->getValue();
			}
			
			$this->validationErrors[] = 'Användarnamnet får endast bestå av bokstäver, siffror och understreck (_) samt vara mellan 3 och 30 tecken.';
			return null;
		}
		$this->validationErrors[] = 'Användarnamnet måste fyllas i.';
		return null;
	}
	
	public function GetFullName() {
		if (isset($_POST[self::$k_fullName])) {
			
			$valRes = Validate::name($_POST[self::$k_fullName]);
			
			if ($valRes->isValid()) {
				return $valRes->getValue();
			}
			
			$this->validationErrors[] = 'Namnet måste vara mellan 3 och 30 tecken.';
			return null;
		}
		$this->validationErrors[] = 'Namnet måste fyllas i.';
		return NULL;
	}
	
	// Returnerar lösenordet från $_POST
	public function GetPassword() {
		if (isset($_POST[self::$k_password]) == true && isset($_POST[self::$k_confirmPassword]) == true) {
			if ($_POST[self::$k_password] == $_POST[self::$k_confirmPassword]) {
				$valRes = Validate::password($_POST[self::$k_password]);
				
				if ($valRes->isValid()) {
					return md5($valRes->getValue());
				}
				
				$this->validationErrors[] = 'Lösenordet måste vara mellan 8 och 100 tecken.';
				return null;
			}
		}
		$this->validationErrors[] = 'Lösenord måste fyllas i två gånger.';
		return null;
	}
	
	// Returnerar email-adressen från $_POST
	public function GetEmail() {
		if (isset($_POST[self::$k_email])) {			
			$valRes = Validate::email($_POST[self::$k_email]);
			
			if ($valRes->isValid()) {
				return $valRes->getValue();
			}
			
			$this->validationErrors[] = 'En korrekt epostadress måste anges.';
			return null;
		}
		$this->validationErrors[] = 'Epost måste fyllas i.';
		return null;
	}
	
	public function RegistrationIsValid() {
		return (count($this->validationErrors) == 0) ? true : false;
	}
	
	public function AddUserExistsError() {
		$this->validationErrors[] = 'Användarnamnet är upptaget.';
	}
	
	public function AddUserCreatedMsg($user) {
		$this->sucessMessages[] = 'Användaren ' . $user->username . ' har skapats.';
	}
	
	public function GetSucessMsgs() {
		$html = '';
		if (isset($this->sucessMessages)) {
			$length = count($this->sucessMessages);
			if ($length > 0) {
				$html .= '<div class="success"><ul>';
				
				for ($i = 0; $i < $length; ++$i) {
					$html .= '<li>';
					$html .= $this->sucessMessages[$i];
					$html .= '</li>';
				}
				
				$html .= '</ul></div>';	
			}
		}
		return $html;		
	}
	
	public function GetValidationErrors() {
		$html = '';
		if (isset($this->validationErrors)) {
			$length = count($this->validationErrors);
			if ($length > 0) {
				$html .= '<div class="errors"><ul>';
				
				for ($i = 0; $i < $length; ++$i) {
					$html .= '<li>';
					$html .= $this->validationErrors[$i];
					$html .= '</li>';
				}
				
				$html .= '</ul></div>';	
			}
		}
		return $html;		
	}
	
	

	// Indikerar ifall användaren vill registrera
	public function TriedToRegister() {
		return isset($_POST[self::$k_register]);
	}
}